/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedbean;

import applicationexcepcion.OrdineStateException;
import applicationexcepcion.SpeseSpedizioneException;
import common.StatoOrdine;
import ejb.common.DettaglioOrdineManagerLocal;
import ejb.common.FornituraManagerLocal;
import ejb.common.OrdineManagerLocal;
import ejb.common.SpeseSpedizioneManagerLocal;
import ejb.negozio.AddettoNegozioEJBLocal;
import entity.AddettoNegozio;
import entity.DettaglioOrdine;
import entity.Fornitura;
import entity.Ordine;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import utility.ExceptionThrower;
import utility.ResourceBundleLoader;

/**
 *
 * @author Antonio
 */
public class GestioneNegozio implements Serializable {

    @EJB
    private SpeseSpedizioneManagerLocal speseSpedizioneManager;
    @EJB
    private FornituraManagerLocal fornituraManager;
    @EJB
    private DettaglioOrdineManagerLocal dettaglioOrdineManager;
    @EJB
    private AddettoNegozioEJBLocal addettoNegozioEJB;
    @EJB
    private OrdineManagerLocal ordineManager;
    private float spese;

    /**
     * Creates a new instance of GestioneNegozio
     */
    public GestioneNegozio() {
    }

    public void setIdAddetto(Long idAddetto) {

        if (idAddetto == null) {

            return;
        }

        addettoNegozioEJB.setId(idAddetto);
    }// setIdAddetto

    public Long getIdAddetto() {

        return addettoNegozioEJB.getId();
    }// getIdAddetto

    public void setidNegozio(Long idNegozio) {

        if (idNegozio == null) {

            return;
        }

        addettoNegozioEJB.setIdNegozio(idNegozio);
    }// setidNegozio

    public Long getIdNegozio() {

        return addettoNegozioEJB.getIdNegozio();
    }// getIdAddetto

    public void setNomeAddetto(String nome) {

        if (nome == null) {

            return;
        }

        addettoNegozioEJB.setNome(nome);
    }// setNomeAddetto

    public String getNomeAddetto() {

        return addettoNegozioEJB.getNome();
    }// getNomeAddetto

    public AddettoNegozio getAddetto() {

        return addettoNegozioEJB.getAddetto();
    }// getAddetto

    public List<Ordine> ordiniInElaborazione() {

        if (this.getIdNegozio() == null) {
            return null;
        }
        return ordineManager.cercaPerStatoNegozio(StatoOrdine.in_Elaborazione, this.getIdNegozio());
    }// ordiniInElaborazione

    public void setFornitura(GestioneFornitura gestioneFornitura) {

        if (gestioneFornitura == null) {
            return;
        }

        gestioneFornitura.setAddetto(addettoNegozioEJB.getAddetto());
        gestioneFornitura.creaMarchi();
    }// setFornitura

    public void setRiassortimento(GestioneRiassortimento gestioneRiassortimento) {

        gestioneRiassortimento.setAddetto(addettoNegozioEJB.getAddetto());
        gestioneRiassortimento.creaMarchi();
    }// setRiassortimento

    public List<DettaglioOrdine> ottieniProdottiDaOrdine(Long idordine) {

        System.out.println("" + idordine);
        return dettaglioOrdineManager.ottieniDaOrdine(idordine);
    }// ottieniProdottiDaOrdine

    public void confermaOrdine(Ordine ordine) {

        FacesContext fc = FacesContext.getCurrentInstance();
        ResourceBundle rb = ResourceBundleLoader.getResourceBundle(fc);

        try {

            ordineManager.ordineConfermato(ordine);
            ExceptionThrower.throwMessageInfo(fc, rb, "confermaOrdineM");
        } catch (OrdineStateException ex) {

            Logger.getLogger(GestioneNegozio.class.getName()).log(Level.SEVERE, null, ex);
            ExceptionThrower.throwMessageError(fc, rb, "confermaOrdineErrorM");

        }
    }// confermaOrdine

    public List<Ordine> ottieniOrdiniConfermati() {

        if (this.getIdNegozio() == null) {
            return null;
        }

        return ordineManager.cercaPerStatoNegozio(common.StatoOrdine.confermato, this.getIdNegozio());
    }// getOrdiniConfermati

    public List<Ordine> ottieniOrdiniSpediti() {

        if (this.getIdNegozio() == null) {
            return null;
        }

        return ordineManager.cercaPerStatoNegozio(common.StatoOrdine.spedito, addettoNegozioEJB.getIdNegozio());
    }// ottieniOrdiniSpediti

    public void spedisciOrdine(Ordine o) {

        FacesContext fc = FacesContext.getCurrentInstance();
        ResourceBundle rb = ResourceBundleLoader.getResourceBundle(fc);

        try {

            ordineManager.ordineSpedito(o);
            ExceptionThrower.throwMessageInfo(fc, rb, "ordineSpeditoM");
        } catch (OrdineStateException ex) {

            Logger.getLogger(GestioneNegozio.class.getName()).log(Level.SEVERE, null, ex);
            ExceptionThrower.throwMessageError(fc, rb, "ordineSpeditoErrorM");

        }
    }// spedisciOrdine

    public List<Fornitura> prodottiInEsaurimento() {

        if (this.getIdNegozio() == null) {
            return null;
        }

        return fornituraManager.prodottiInEsaurimentoNegozio(this.getIdNegozio(), 10);
    }// prodottiInEsaurimento

    public String spedizioneOrdine() {

        return "AccessoSpedizioneOrdine";
    }// spedizioneOrdine

    public void ottieniSpese() {

        if (this.getIdNegozio() == null) {

            return;
        }

        if (speseSpedizioneManager.getSpeseSpedizione(this.getIdNegozio()) == null) {

            spese = 0;
        } else {

            spese = speseSpedizioneManager.getSpeseSpedizione(this.getIdNegozio()).getPrezzo();
        }
    }// ottieniSpese

    /**
     * Get the value of spese
     *
     * @return the value of spese
     */
    public float getSpese() {
        return spese;
    }

    /**
     * Set the value of spese
     *
     * @param spese new value of spese
     */
    public void setSpese(float spese) {

        if (spese <= 0) {
            return;
        }

        this.spese = spese;

        if (speseSpedizioneManager.getSpeseSpedizione(this.getIdNegozio()) == null) {

            speseSpedizioneManager.creaSpese(spese, this.getAddetto());

        } else {
            try {

                speseSpedizioneManager.modificaSpese(spese, this.getAddetto());
            } catch (SpeseSpedizioneException ex) {

                Logger.getLogger(GestioneNegozio.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }// setSpese
}
